package com.ruoyi.bussiness.service.impl;

import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import com.alibaba.fastjson2.JSON;
import com.ruoyi.bussiness.domain.PlanDetailsRsp;
import com.ruoyi.common.utils.DateUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.bussiness.mapper.CcyParseDetailsMapper;
import com.ruoyi.bussiness.domain.CcyParseDetails;
import com.ruoyi.bussiness.service.ICcyParseDetailsService;

/**
 * 数据回测Service业务层处理
 * 
 * @author wzy
 * @date 2025-10-19
 */
@Service
@Slf4j
public class CcyParseDetailsServiceImpl implements ICcyParseDetailsService 
{
    @Autowired
    private CcyParseDetailsMapper ccyParseDetailsMapper;

    /**
     * 查询数据回测
     * 
     * @param id 数据回测主键
     * @return 数据回测
     */
    @Override
    public CcyParseDetails selectCcyParseDetailsById(Long id)
    {
        return ccyParseDetailsMapper.selectCcyParseDetailsById(id);
    }

    /**
     * 查询数据回测列表
     * 
     * @param ccyParseDetails 数据回测
     * @return 数据回测
     */
    @Override
    public List<CcyParseDetails> selectCcyParseDetailsList(CcyParseDetails ccyParseDetails)
    {
        return ccyParseDetailsMapper.selectCcyParseDetailsList(ccyParseDetails);
    }

    /**
     * 新增数据回测
     * 
     * @param ccyParseDetails 数据回测
     * @return 结果
     */
    @Override
    public int insertCcyParseDetails(CcyParseDetails ccyParseDetails)
    {
        return ccyParseDetailsMapper.insertCcyParseDetails(ccyParseDetails);
    }

    /**
     * 修改数据回测
     * 
     * @param ccyParseDetails 数据回测
     * @return 结果
     */
    @Override
    public int updateCcyParseDetails(CcyParseDetails ccyParseDetails)
    {
        ccyParseDetails.setUpdateTime(DateUtils.getNowDate());
        return ccyParseDetailsMapper.updateCcyParseDetails(ccyParseDetails);
    }

    /**
     * 批量删除数据回测
     * 
     * @param ids 需要删除的数据回测主键
     * @return 结果
     */
    @Override
    public int deleteCcyParseDetailsByIds(Long[] ids)
    {
        return ccyParseDetailsMapper.deleteCcyParseDetailsByIds(ids);
    }

    /**
     * 删除数据回测信息
     * 
     * @param id 数据回测主键
     * @return 结果
     */
    @Override
    public int deleteCcyParseDetailsById(Long id)
    {
        return ccyParseDetailsMapper.deleteCcyParseDetailsById(id);
    }

    @Override
    public Map<String, Object> selectTotal(CcyParseDetails criteria) {
        Map<String,Object> map = new HashMap<>();
        List<PlanDetailsRsp> list = ccyParseDetailsMapper.selectTotal(criteria);
        PlanDetailsRsp maxRsp = list.stream() .max(Comparator.comparingDouble(m -> (m.get最终收益()))) .orElse(null);
        PlanDetailsRsp nowRsp = list.stream() .filter(m -> criteria.getPlanId()!=null && String.valueOf(criteria.getPlanId()).equals(m.get方案编号())).findFirst() .orElse(null);
        map.put("max",maxRsp!=null?maxRsp.toString():"{}");
        map.put("now", nowRsp!=null?nowRsp.toString():"{}");
        String paixu = list.stream().sorted((o1, o2) -> Double.compare(o2.get最终收益(), o1.get最终收益())) // 收益率降序排序[7][8]
                .map(rsp -> "方案" + rsp.get方案编号()).collect(Collectors.joining(">"));// 连接字符串[5]
        map.put("sort",paixu);
        log.info("返回:"+JSON.toJSONString(map));
        return map;
    }
}
